package com.one.common.view.pagestate.listpage;


import androidx.recyclerview.widget.RecyclerView;

import com.one.common.view.multitytype.MultiTypeAdapter;
import com.one.common.view.pagestate.refreshlayout.IHeaderView;
import com.one.common.view.pagestate.refreshlayout.TwinklingRefreshLayout;
import com.one.common.view.pagestate.statepage.StatePageInterface;

import java.util.List;

/**
 * creator: zhulunjun
 * time:    2018/3/8
 * describe: 列表页面接口
 */

public interface ListPageInterface extends StatePageInterface {

    /**
     * 注册数据模型
     */
    void registerDate();

    /**
     * 主动调用刷新
     */
    void refresh();

    /**
     * 刷新要做的事
     */
    void doRefresh();

    /**
     * 主动调用加载更多
     */
    void loadMore();

    /**
     * 加载更多做的事
     */
    void doLoadMore();

    /**
     * 加载数据，这里是数据源头
     */
    void loadData();

    /**
     * 加载成功的回调，加载成功后调用
     *
     * @param data 加载成功的数据
     */
     void loadSuccess(List<?> data);

    /**
     * 加载失败的回调，加载失败后调用
     *
     * @param errorMessage 失败的文本
     */
    void loadFail(String errorMessage);

    /**
     * 替换数据
     *
     * @param data 需要替换的数据
     */
    void replaceData(List<?> data);

    /**
     * 添加数据
     */
    void addData(Object o);

    /**
     * 添加数据到指定位置
     */
    void addData(int index, Object o);

    /**
     * 删除数据
     */
    void deleteData(Object o);

    /**
     * 删除数据
     */
    void deleteData(int index);

    /**
     * 底部 自定義空間
     */
    void addBottomView(int resId);

    /**
     * 顶部 自定義空間
     */
    void addTopView(int resId);

    /**
     * 顶部 自定義空間 悬浮
     */
    void addFloatTopView(int resId);

    /**
     * 隐藏上拉更多
     */
    void hindLoadMore();

    /**
     * 隐藏下拉刷新
     */
    void hindRefresh();

    /**
     * 显示上拉更多
     */
    void showLoadMore();

    /**
     * 显示下拉刷新
     */
    void showRefresh();

    /**
     * 设置list数据从底部开始显示，聊天列表的情况
     */
    boolean getStackFromEnd();

    List<?> getData();

    RecyclerView getListView();

    TwinklingRefreshLayout getRefresh();

    int getPage();

    MultiTypeAdapter getAdapter();

    /**
     * 自定义列表样式
     * @return 默认返回空
     */
    RecyclerView.LayoutManager getLayoutManager();

    /**
     * 设置头部刷新控件
     */
    void setHeadView(IHeaderView headerView);

    /**
     * 设置头部颜色
     * @param color
     */
    void setHeaderColor(int color);

}
